home *** CD-ROM | disk | FTP | other *** search
/ Ham Radio / Ham Radio CD-ROM (Emerald Software) (1995).ISO / maps / worldtim / worldtim.bas next >
BASIC Source File  |  1985-08-25  |  10KB  |  324 lines

  1. 10 REM ************************* WORLDTIM.BAS *********************************
  2. 20 REM                    WORLD TIME TABLE PROGRAM
  3. 30 REM                         BY GORDON BEST
  4. 40 REM                            MAY 1985
  5. 50 REM ************************************************************************
  6. 60 DIM CITY$(100)
  7. 70 DIM AH(100)
  8. 80 DIM AM(100)
  9. 90 DIM ADST$(100)
  10. 100 DIM RR(100)
  11. 110 DIM CC(100)
  12. 120 DEF FNUP$(A$)=CHR$((ASC(A$)+(32*(ASC(A$)>96))))
  13. 130 KEY OFF
  14. 140 FT$=""
  15. 150 COLOR 0,1
  16. 160 CLS
  17. 170 OPEN "WORLDTIM.DAT" FOR INPUT AS #1
  18. 180 LINE INPUT #1,X$
  19. 190 X$=X$+",S,N,"
  20. 200 C=INSTR(X$,",") : LOCNAM$=LEFT$(X$,C-1) : X$=MID$(X$,C+1)
  21. 210 C=INSTR(X$,",") : LOCDST$=LEFT$(X$,C-1) : X$=MID$(X$,C+1)
  22. 220 C=INSTR(X$,",") : DSTADJ=VAL(LEFT$(X$,C-1)): X$=MID$(X$,C+1)
  23. 230 C=INSTR(X$,",") : NYCADJ=VAL(LEFT$(X$,C-1)): X$=MID$(X$,C+1)
  24. 240 C=INSTR(X$,",") : DST$=LEFT$(X$,C-1) : X$=MID$(X$,C+1)
  25. 250 C=INSTR(X$,",") : MILT$=LEFT$(X$,C-1) : X$=MID$(X$,C+1)
  26. 260 C=INSTR(X$,",") : SQZ$=LEFT$(X$,C-1) : X$=MID$(X$,C+1)
  27. 270 FOR I=1 TO 100
  28. 280 IF EOF(1) GOTO 310
  29. 290 INPUT #1,CITY$(I),AH(I),AM(I),ADST$(I),RR(I),CC(I)
  30. 300 NEXT I
  31. 310 CLOSE 1
  32. 320 NC=I-1
  33. 330 PREVMIN=-1
  34. 340 'MAIN LOOP
  35. 350 COLOR 0,1
  36. 360 CLS
  37. 370 IF FT$="" THEN TT$=TIME$ ELSE TT$=FT$
  38. 380 COLOR 14,4
  39. 390 LOCATE 1,1:PRINT DATE$;
  40. 400 HDR$="** WORLD TIME FROM "+LOCNAM$+" **" : HP=INT((80-LEN(HDR$))/2)
  41. 410 LOCATE 1,HP:PRINT HDR$
  42. 420 IF FT$<>"" THEN LOCATE 1,60 : PRINT "*FREEZE*";
  43. 430 LOCATE 1,69:PRINT TT$;
  44. 440 IF DST$="Y" THEN COLOR 0,2 ELSE COLOR 10,0
  45. 450 LOCATE 1,78 : IF DST$="Y" THEN PRINT "DST" ELSE PRINT "STD";
  46. 460 H=VAL(LEFT$(TT$,2))
  47. 470 M=VAL(MID$(TT$,4,2))
  48. 480 FOR I=1 TO NC
  49. 490 IF FT$="" THEN TT$=TIME$ ELSE TT$=FT$
  50. 500 H=VAL(LEFT$(TT$,2))
  51. 510 M=VAL(MID$(TT$,4,2))
  52. 520 IF SQZ$="Y" THEN BLNK$="" ELSE BLNK$=" "
  53. 530 IF DST$="Y" AND ADST$(I)="Y" THEN COLOR 0,2 ELSE COLOR 10,0
  54. 540 CH=H+AH(I)-NYCADJ
  55. 550 IF DST$="N" THEN GOTO 580
  56. 560 IF ADST$(I)=LOCDST$ THEN GOTO 580
  57. 570 IF LOCDST$="Y" THEN CH=CH-DSTADJ ELSE CH=CH+DSTADJ
  58. 580 CM=M+AM(I)
  59. 590 IF CM>60 THEN CH=CH+1 : CM=CM-60
  60. 600 IF CM<0 THEN CH=CH-1 : CM=CM+60
  61. 610 CD$=""
  62. 620 IF CH>23 THEN CD$=BLNK$+"+1" : CH=CH-24
  63. 630 IF CH<0 THEN CD$=BLNK$+"-1" : CH=CH+24
  64. 640 IF MILT$="M" THEN AP$="" : GOTO 680
  65. 650 AP$="am"
  66. 660 IF CH>12 THEN CH=CH-12 : AP$="pm"
  67. 670 IF CH=0 THEN CH=12
  68. 680 CT$=" "+MID$(STR$(CH),2)+":"+RIGHT$(STR$(CM),2)+AP$+CD$
  69. 690 IF MID$(CT$,3,1)=" " THEN MID$(CT$,3,1)="0"
  70. 700 IF MID$(CT$,4,1)=" " THEN MID$(CT$,4,1)="0"
  71. 710 IF MID$(CT$,5,1)=" " THEN MID$(CT$,5,1)="0"
  72. 720 D$=BLNK$+CITY$(I)+CT$+BLNK$
  73. 730 D=LEN(D$)
  74. 740 DR=RR(I) : DC=CC(I)
  75. 750 IF DR<3 THEN DR=3
  76. 760 IF DR >23 THEN DR=23
  77. 770 IF DC<1 THEN DC=1
  78. 780 IF DC>81-D THEN DC=81-D
  79. 790 LOCATE DR,DC : PRINT D$;
  80. 800 IF FT$="" THEN COLOR 14,4 : LOCATE 1,69 : PRINT TT$
  81. 810 NEXT I
  82. 820 COLOR 0,3
  83. 830 LOCATE 25,2:PRINT "<<    F=FREEZE TIME   A=ADD CITY   C=CHANGE   E=ERASE   X=EXIT   S=SETUP    >>";
  84. 840 A$=""
  85. 850 A$=INKEY$
  86. 860 IF A$="" THEN GOTO 370
  87. 870 PREVMIN=-1
  88. 880 A$=FNUP$(A$)
  89. 890 IF A$="F" THEN GOTO 970
  90. 900 IF A$="S" THEN GOTO 1080
  91. 910 IF A$="A" THEN GOTO 1620
  92. 920 IF A$="C" THEN GOTO 1860
  93. 930 IF A$="E" THEN GOTO 2390
  94. 940 IF A$="X" THEN COLOR 15,1:CLS: SYSTEM
  95. 950 IF A$="Z" THEN COLOR 15,1:CLS: END
  96. 960 BEEP : GOTO 840
  97. 970 'FREEZE TIME
  98. 980 CLS
  99. 990 LOCATE 10,30 : PRINT "*** FREEZE TIME ***"
  100. 1000 LOCATE 22,20 : PRINT "HIT <ENTER> TO RESET TO SYSTEM TIME"
  101. 1010 LOCATE 15,20 : INPUT "TIME TO FREEZE (HH:MM)";FT$
  102. 1020 CLS
  103. 1030 IF FT$="" THEN GOTO 340
  104. 1040 IF LEN(FT$)<>5 THEN BEEP : GOTO 980
  105. 1050 IF MID$(FT$,3,1)<>":" THEN BEEP :GOTO 980
  106. 1060 FT$=FT$+":00"
  107. 1070 GOTO 340
  108. 1080 'SETUP
  109. 1090 CLS
  110. 1100 LOCATE 3,20 : PRINT "** SETUP **"
  111. 1110 LOCATE 6,20  : PRINT "1 > BASE LOCATION         : ";LOCNAM$;
  112. 1120 LOCATE 8,20  : PRINT "2 > LOCAL DST (Y/N)       : ";LOCDST$;
  113. 1130 LOCATE 10,20 : PRINT "3 > DST ADJ FACTOR        :";DSTADJ;
  114. 1140 LOCATE 12,20 : PRINT "4 > NYC ADJ FACTOR        :";NYCADJ;
  115. 1150 LOCATE 14,20 : PRINT "5 > DST IN EFFECT (Y/N)   : ";DST$;
  116. 1160 LOCATE 16,20 : PRINT "6 > (S)TD OR (M)ILITARY   : ";MILT$;
  117. 1170 LOCATE 18,20 : PRINT "7 > SQUEEZE DISPLAY (Y/N) : ";SQZ$;
  118. 1180 LOCATE 21,20 : PRINT "0 > END SETUP"
  119. 1190 CL=24 : GOSUB 3160
  120. 1200 LOCATE 24,10 : PRINT "WHAT DO YOU WANT TO CHANGE ";:A$=INPUT$(1)
  121. 1210 IF A$="0" THEN GOSUB 3010 : CLS  : GOTO 340
  122. 1220 IF A$="1" THEN GOTO 1300
  123. 1230 IF A$="2" THEN GOTO 1340
  124. 1240 IF A$="3" THEN GOTO 1390
  125. 1250 IF A$="4" THEN GOTO 1430
  126. 1260 IF A$="5" THEN GOTO 1470
  127. 1270 IF A$="6" THEN GOTO 1520
  128. 1280 IF A$="7" THEN GOTO 1570
  129. 1290 BEEP : GOTO 1190
  130. 1300 'CHANGE BASE LOCATION
  131. 1310 CL=24 : GOSUB 3160
  132. 1320 LOCATE 24,20 : INPUT "BASE LOCATION        : ",LOCNAM$
  133. 1330 GOTO 1090
  134. 1340 'CHANGE LOCAL DST
  135. 1350 CL=24 : GOSUB 3160
  136. 1360 LOCATE 24,20 : INPUT "LOCAL DST (Y/N)      : ",LOCDST$
  137. 1370 LOCDST$=FNUP$(LOCDST$)
  138. 1380 GOTO 1090
  139. 1390 'CHANGE DST ADJ FACTOR
  140. 1400 CL=24 : GOSUB 3160
  141. 1410 LOCATE 24,20 : INPUT "DST ADJ FACTOR       : ",DSTADJ
  142. 1420 GOTO 1090
  143. 1430 'CHANGE NYC ADJ FACTOR
  144. 1440 CL=24 : GOSUB 3160
  145. 1450 LOCATE 24,20 : INPUT "NYC ADJ FACTOR       : ",NYCADJ
  146. 1460 GOTO 1090
  147. 1470 'CHANGE DST FLAG
  148. 1480 CL=24 : GOSUB 3160
  149. 1490 LOCATE 24,20 : INPUT "DST IN EFFECT (Y/N)  : ",DST$
  150. 1500 DST$=FNUP$(DST$)
  151. 1510 GOTO 1090
  152. 1520 'CHANGE STD/MILT TIME DISPLAY
  153. 1530 CL=24 : GOSUB 3160
  154. 1540 LOCATE 24,20 : INPUT "(S)TD OR (M)ILITARY  : ",MILT$
  155. 1550 MILT$=FNUP$(MILT$)
  156. 1560 GOTO 1090
  157. 1570 'CHANGE SQUEEZE Y/N
  158. 1580 CL=24 : GOSUB 3160
  159. 1590 LOCATE 24,20 : INPUT "SQUEEZE DISPLAY (Y/N) : ",SQZ$
  160. 1600 SQZ$=FNUP$(SQZ$)
  161. 1610 GOTO 1090
  162. 1620 'ADD
  163. 1630 CLS
  164. 1640 LOCATE 3,20 : PRINT "** ADD **"
  165. 1650 GOSUB 2650
  166. 1660 IF A$="" THEN GOTO 340
  167. 1670 GOSUB 2710
  168. 1680 IF A$="" THEN GOTO 1650
  169. 1690 GOSUB 2770
  170. 1700 IF A$="" THEN GOTO 1670
  171. 1710 GOSUB 2830
  172. 1720 IF A$="" THEN GOTO 1690
  173. 1730 GOSUB 2890
  174. 1740 IF A$="" THEN GOTO 1710
  175. 1750 GOSUB 2950
  176. 1760 IF A$="" THEN GOTO 1730
  177. 1770 NC=NC+1
  178. 1780 CITY$(NC)=CT$
  179. 1790 AH(NC)=HH
  180. 1800 AM(NC)=MM
  181. 1810 ADST$(NC)=AD$
  182. 1820 RR(NC)=IRR
  183. 1830 CC(NC)=ICC
  184. 1840 GOSUB 3010
  185. 1850 GOTO 1620
  186. 1860 ' CHANGE CITY
  187. 1870 CLS
  188. 1880 LOCATE 3,20 : PRINT "** CHANGE **"
  189. 1890 GOSUB 2650
  190. 1900 IF A$="" THEN GOTO 340
  191. 1910 GOSUB 3100
  192. 1920 IF REC=0 THEN BEEP : GOTO 1860
  193. 1930 FOR CL=10 TO 20 STEP 2 : GOSUB 3160 : NEXT
  194. 1940 LOCATE 10,20 : PRINT "(H)OURS DIFF     :";AH(REC)
  195. 1950 LOCATE 12,20 : PRINT "(M)INUTES DIFF   :";AM(REC)
  196. 1960 LOCATE 14,20 : PRINT "(A)DJ DST <Y/N>  : ";ADST$(REC)
  197. 1970 LOCATE 16,20 : PRINT "DISPLAY (R)OW    :";RR(REC)
  198. 1980 LOCATE 18,20 : PRINT "DISPLAY (C)OL    :";CC(REC)
  199. 1990 LOCATE 20,20 : PRINT "(E)ND CHANGES"
  200. 2000 LOCATE 23,10 : PRINT "WHAT TO CHANGE (H M A R C E)":C$=INPUT$(1)
  201. 2010 C$=FNUP$(C$)
  202. 2020 IF C$="H" THEN GOTO 2110
  203. 2030 IF C$="M" THEN GOTO 2160
  204. 2040 IF C$="A" THEN GOTO 2210
  205. 2050 IF C$="R" THEN GOTO 2260
  206. 2060 IF C$="C" THEN GOTO 2310
  207. 2070 IF C$=" " THEN GOTO 2360
  208. 2080 IF C$="E" THEN GOTO 2360
  209. 2090 IF C$="Q" THEN GOTO 2360
  210. 2100 BEEP : GOTO 2000
  211. 2110 'HOURS
  212. 2120 GOSUB 2710
  213. 2130 IF A$="" THEN GOTO 1930
  214. 2140 AH(REC)=VAL(A$)
  215. 2150 GOTO 1930
  216. 2160 'MINUTES
  217. 2170 GOSUB 2770
  218. 2180 IF A$="" THEN GOTO 1930
  219. 2190 AM(REC)=VAL(A$)
  220. 2200 GOTO 1930
  221. 2210 'ADJ DST
  222. 2220 GOSUB 2830
  223. 2230 IF A$="" THEN GOTO 1930
  224. 2240 ADST$(REC)=FNUP$(A$)
  225. 2250 GOTO 1930
  226. 2260 'ROW
  227. 2270 GOSUB 2890
  228. 2280 IF A$="" THEN GOTO 1930
  229. 2290 RR(REC)=VAL(A$)
  230. 2300 GOTO 1930
  231. 2310 'COL
  232. 2320 GOSUB 2950
  233. 2330 IF A$="" THEN GOTO 1930
  234. 2340 CC(REC)=VAL(A$)
  235. 2350 GOTO 1930
  236. 2360 'ALL DONE
  237. 2370 GOSUB 3010
  238. 2380 GOTO 1860
  239. 2390 ' ERASE CITY
  240. 2400 CLS
  241. 2410 LOCATE 3,20 : PRINT "** ERASE **"
  242. 2420 GOSUB 2650
  243. 2430 IF A$="" THEN GOTO 340
  244. 2440 GOSUB 3100
  245. 2450 IF REC=0 THEN BEEP : GOTO 1860
  246. 2460 FOR CL=12 TO 20 STEP 2 : GOSUB 3160 : NEXT
  247. 2470 LOCATE 12,20 : PRINT "HOURS DIFF     : ";AH(REC)
  248. 2480 LOCATE 14,20 : PRINT "MINUTES DIFF   : ";AM(REC)
  249. 2490 LOCATE 16,20 : PRINT "ADJ DST (Y/N)  : ";ADST$(REC)
  250. 2500 LOCATE 18,20 : PRINT "DISPLAY ROW     :";RR(REC)
  251. 2510 LOCATE 20,20 : PRINT "DISPLAY COL     :";CC(REC)
  252. 2520 CL=23 : GOSUB 3160
  253. 2530 LOCATE 23,10 : PRINT "OK TO ERASE ":C$=INPUT$(1)
  254. 2540 C$=FNUP$(C$)
  255. 2550 IF C$<>"Y" THEN GOTO 2390
  256. 2560 CITY$(REC)=CITY$(NC)
  257. 2570 AH(REC)=AH(NC)
  258. 2580 AM(REC)=AM(NC)
  259. 2590 ADST$(REC)=ADST$(NC)
  260. 2600 RR(REC)=RR(NC)
  261. 2610 CC(REC)=CC(NC)
  262. 2620 NC=NC-1
  263. 2630 GOSUB 3010
  264. 2640 GOTO 2390
  265. 2650 'ASK CITY
  266. 2660 CL=10 : GOSUB 3160
  267. 2670 LOCATE 8,20 : PRINT "CITY           : "; : INPUT " >> ",A$
  268. 2680 IF A$="" THEN RETURN
  269. 2690 CT$=A$
  270. 2700 RETURN
  271. 2710 ' ASK HOURS
  272. 2720 CL=12 : GOSUB 3160
  273. 2730 LOCATE 12,20 : PRINT "HOURS DIFF     : "; : INPUT " >> ",A$
  274. 2740 IF A$="" THEN RETURN
  275. 2750 HH=VAL(A$)
  276. 2760 RETURN
  277. 2770 ' ASK MINS
  278. 2780 CL=14 : GOSUB 3160
  279. 2790 LOCATE 14,20 : PRINT "MINUTES DIFF   : "; : INPUT " >> ",A$
  280. 2800 IF A$="" THEN RETURN
  281. 2810 MM=VAL(A$)
  282. 2820 RETURN
  283. 2830 ' ASK DST
  284. 2840 CL=16 : GOSUB 3160
  285. 2850 LOCATE 16,20 : PRINT "ADJ DST (Y/N)  : "; : INPUT " >> ",A$
  286. 2860 IF A$="" THEN RETURN
  287. 2870 AD$=FNUP$(A$)
  288. 2880 RETURN
  289. 2890 ' ASK ROW
  290. 2900 CL=18 : GOSUB 3160
  291. 2910 LOCATE 18,20 : PRINT "DISPLAY ROW     :"; : INPUT " >> ",A$
  292. 2920 IF A$="" THEN RETURN
  293. 2930 IRR=VAL(A$)
  294. 2940 RETURN
  295. 2950 ' ASK COL
  296. 2960 CL=20 : GOSUB 3160
  297. 2970 LOCATE 20,20 : PRINT "DISPLAY COL     :"; : INPUT " >> ",A$
  298. 2980 IF A$="" THEN RETURN
  299. 2990 ICC=VAL(A$)
  300. 3000 RETURN
  301. 3010 'REWRITE FILE
  302. 3020 CLS : LOCATE 10,25 : PRINT "*** ONE MOMENT PLEASE ***"
  303. 3030 OPEN "WORLDTIM.DAT" FOR OUTPUT AS #1
  304. 3040 PRINT #1,LOCNAM$;",";LOCDST$;",";DSTADJ;",";NYCADJ;",";DST$;",";MILT$;",";SQZ$
  305. 3050 FOR I=1 TO NC
  306. 3060 PRINT #1,CITY$(I);",";AH(I);",";AM(I);",";ADST$(I);",";RR(I);",";CC(I)
  307. 3070 NEXT I
  308. 3080 CLOSE 1
  309. 3090 RETURN
  310. 3100 'FIND CITY
  311. 3110 REC=0
  312. 3120 FOR I=1 TO NC
  313. 3130 IF CITY$(I)=A$ THEN REC=I : RETURN
  314. 3140 NEXT I
  315. 3150 RETURN
  316. 3160 'CLEAR LINE
  317. 3170 LOCATE CL,1 :PRINT SPACE$(79);
  318. 3180 RETURN
  319. 3190 REM FORCE CAPS LOCK ON / ALL OTHERS OFF
  320. 3200 DEF SEG = &H40
  321. 3210 POKE &H17,64
  322. 3220 DEF SEG
  323. 3230 RETURN
  324.